package com.vben.system.biz.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vben.system.api.dto.rbac.RemoveUserRoleDTO;
import com.vben.system.api.dto.rbac.RoleIdDTO;
import com.vben.system.api.dto.rbac.SaveUserRoleDTO;
import com.vben.system.api.dto.rbac.UserDTO;
import com.vben.system.api.entity.SysUser;
import com.vben.system.api.vo.user.SysUserVO;

import java.util.List;

/**
 * RBAC 相关业务接口
 */
public interface SysRbacService {

    /**
     * 根据角色ID获取菜单ID集合
     *
     * @param roleId 角色ID
     * @return 菜单ID集合
     */
    List<Long> getRoleMenuIds(Long roleId);

    /**
     * 保存角色菜单关系
     *
     * @param roleId  角色ID
     * @param menuIds 菜单ID集合
     * @return 是否保存成功
     */
    Boolean saveRoleMenu(Long roleId, List<Long> menuIds);

    /**
     * 通过角色ID获取用户列表
     *
     * @param roleId 角色ID
     * @return 用户列表
     */
    Page<SysUser> getUserListByRoleId(RoleIdDTO dto);

    /**
     * 删除用户角色关系
     *
     * @param roleId 角色ID
     * @param userId 用户ID
     * @return 是否删除成功
     */
    Boolean removeUserRole(List<RemoveUserRoleDTO> dtoList);

    /**
     * 获取用户列表-排除指定角色
     *
     * @param roleId 角色ID
     * @return 用户列表
     */
    Page<SysUserVO> getUserListExcludeRoleId(RoleIdDTO roleId);

    /**
     * 添加用户角色关系
     *
     * @param roleId  角色ID
     * @param userIds 用户ID集合
     * @return 是否保存成功
     */
    Boolean saveUserRole(List<SaveUserRoleDTO> dtoList);
}